package com.ruoyi.common.utils;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/**
 * @PackageName: com.ruoyi.common.utils
 * @ClassName: ConvertToMap
 * @Description:
 * @Author: czl
 * @Date: 2025/11/2 21:33
 */
public class ConvertToMap {

    /**
     * 将实体对象转换为Map，key为下划线命名的字段名
     *
     * @param obj 实体对象
     * @return 转换后的Map
     */
    public static <T> Map<String, Object> convertObjectToMap(T obj) {
        Map<String, Object> resultMap = new HashMap<>();
        // 获取对象的所有字段，包括父类字段
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field field : fields) {
            try {
                field.setAccessible(true);
                Object value = field.get(obj);
                String key = camelToUnderline(field.getName());
                resultMap.put(key, value);
            } catch (IllegalAccessException e) {
                // 记录异常但不中断处理
                e.printStackTrace();
            }
        }
        return resultMap;
    }

    /**
     * 驼峰命名转下划线命名
     *
     * @param camelCase 驼峰命名字符串
     * @return 下划线命名字符串
     */
    private static String camelToUnderline(String camelCase) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < camelCase.length(); i++) {
            char c = camelCase.charAt(i);
            if (Character.isUpperCase(c)) {
                if (i > 0) {
                    result.append("_");
                }
                result.append(Character.toLowerCase(c));
            } else {
                result.append(c);
            }
        }
        return result.toString();
    }
}
